import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DirHelper {
	static int i = 0;

	public static void copyDirectory(File sourcelocation, File targetdirectory)
			throws IOException {
		i++;

		if ((i % 100) == 0)
			System.err.print(" . ");
		// 디렉토리인 경우
		if (sourcelocation.isDirectory()) {
			// 복사될 Directory가 없으면 만듭니다.
			if (!targetdirectory.exists()) {
				targetdirectory.mkdir();
			}

			String[] children = sourcelocation.list();
			for (int i = 0; i < children.length; i++) {
				copyDirectory(new File(sourcelocation, children[i]), new File(
						targetdirectory, children[i]));
			}
		} else {
			// 파일인 경우
			InputStream in = new FileInputStream(sourcelocation);
			OutputStream out = new FileOutputStream(targetdirectory);

			// Copy the bits from instream to outstream
			byte[] buf = new byte[1024];
			int len;
			while ((len = in.read(buf)) > 0) {
				out.write(buf, 0, len);
			}
			in.close();
			out.close();
		}
	}

	public static void deleteDir(File file) {
		if (file.isDirectory()) {
			if (file.listFiles().length != 0) {
				File[] fileList = file.listFiles();
				for (int i = 0; i < fileList.length; i++) {
					// 디렉토리이고 서브 디렉토리가 있을 경우 리커젼을 한다...
					deleteDir(fileList[i]);
					file.delete();
				}
			} else {

				// 파일 트리의 리프까지 도달했을때 삭제...
				file.delete();
			}
		} else {

			// 파일 일 경우 리커젼 없이 삭제...
			file.delete();
		}
	}

}